<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Review of Linux based on Centos7</title>
</head>

<body>
    <hr>
    <b style="color: red;">《鸟哥的linux私房菜 基础篇》</b>
    <hr>
    <pre style="line-height: 20px;">
        1.CPU的种类：
            RISC：微指令集较为精简，每个指令运行时间短，动作较单纯，执行性能较佳。ARM
            CISC：微指令集的每个小指令可以执行一些较低阶的硬件操作，指令数目多而复杂，每条指令的长度都不相同。
        AMD、Intel、VIA等x86架构的CPU，2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位，后来AMD依此架构
        修改新一代的CPU为64位，为了区分两者的差异，64的个人计算机CPU又被称为x86_64的架构        
        
        2.最重要的接口设备是主板，因为主板负责将所有的设备连接在一起，主板上最重要的是主板芯片组
        
        3.计算机的分类
            超级计算机：主要用于需要有高速计算的计划中，如国防军事、气象预测
            大型计算机：用来处理大量资料与复杂的运算，例如大型企业的主机、全国性的证券交易所
            迷你计算机:放在一般作业场所，不需要特殊空调场所，通常用来作为科学研究、工程 分析与工厂的流程管理
            工作站：针对特殊用途设计的计算机，学术研究和工程分析
            PC：
        
        4.计算机单位：档案容量使用二进制形式，速度单位使用十进制
        
        5.PC架构与接口设备：Linux最早发展的时候，就是依据个人计算机来发展的。两大x86开发上（Intel，AMD）架构并不兼容
        芯片组一般分为北桥与南桥，北桥负责CPU/RAM/VGA等的连接，南桥则负责PCI接口与速度较慢的I/O装置。
        
        6.I/O地址和IRQ中断信道：各装置可以透过IRQ信道来告知 CPU该装置的工作情况。
        
        7.操作系统：OS的核心层直接参考硬件规格写成、操作系统只是在管理整个硬件资源、应用程序的开发都是参考操作系统提供的开发接口
        
        8.kernel至少含有的功能：
            系统调用接口
            程序管理
            内存管理
            文件系统管理
            装置的驱动
        
        9.了解系统中装置的信息：CPU-Z（Windows环境）、cat/proc/cpuinfo  lspci(linux)
        
        10.Torvalds最早写出linux时，该核心仅能驱动386所有的硬件
     gen
        11.操作系统发展历史：
            Multics-->Unics(汇编)/Unix（C语言）-->BSD、AT&T System V-->x86架构的Minix-->GUN gcc emacs glibc Bash Shell
            --> 图形接口XFree86计划-->Linux（参考Minix）

            早期x86架构计算机不是很受重视的原因，就是因为x86的芯片对于多任务的处理不佳，386推出后，有很大改善。
            由于Linux希望能够兼容于Unix，修改Linux，参考标准的POSIX标准，规范核心与应用程序之间的接口。

            将某些功能独立出核心外，在需要的时候才加载到核心中，增加了Linux核心的可维护能力。Linux其实就是一个OS最底层核心及其提供的
            核心工具
        
        12.各Linux Distribution的区别：不同的管理工具以及套件管理的模式，架构的严谨度与选择的套件内容不同            
        
        13.linux kernel非常精致小巧，可以在很多强调省电以及较低硬件资源的环境底下执行；linux在很多方面都有应用：   
            网络服务器：
            关键任务的应用（金融数据库、大型企业网管环境）
            学术机构的高效能运算任务
            桌面计算机
            手持系统
            嵌入式系统 
        14.每个distribution提供的软件内容虽然大同小异，然而其整合的工具都不一样，同时，每种软件在不同的distribution上摆放的目录位置虽然也是
        大同小异，然而某些配置文件就是摆在不同的目录下。
        
        15.档案的安全性、人员账号的管理、软件的安装/修改/设定、登陆文件的分析以及自动化工作排程与程序的撰写等等。

        16.不同接口的硬件在Linux中名：ide接口的磁盘--/dev/hda、SATA/USB/SCSI等磁盘接口都是 SCSI模块驱动--/dev/sd[a-p]

        17.磁盘的第一个扇区：MBR 446bytes、partition table 64bytes

            硬盘存储容量=磁头数*磁道数*每道扇区数*每扇区字节数

            主引导扇区：MBR、DPT  512字节

            MBR---检查DPT是否正确，根据DPT信息确定引导分区，并将引导分区的启动程序调用内存

            OBR---判断根目录前两个文件是否是操作系统引导文件

            实际每一个分区都包含一个OBR，逻辑分区之间以一种链式结构进行相连

            BIOS与MBR都是硬件本身会支持的功能

        18.MBR中boot loader提供功能：提供选单、载入核心档案、转交其他loader

            loader只会认识自己的系统槽内的可开机核心档案，以及其他loader
        
        19.挂载：利用一个目录当成进入点，将磁盘分区的数据放置在该目录下

             硬盘盒？？
        
             电脑的硬件配置？？

        20.linux上user gruop others的概念

            档案的属性 drwxrwxrwx i root root 4562  test.txt   每个节点信息代表的含义

            /etc/group  /etc/passwd    /etc/shadow存放密码之类的信息
            
            chgrp   chown   chmod
        
            使用字符和数字改变文档的权限 chmod  u   g   o   a   +     -      =


            rwx权限对于目录和文档权限的区别：x对于目录的含义--工作目录

        21.linux中的档案种类

            -     ascll文件   二进制文件    数据格式文件

            d

            l   连结档


            b   供系统随机存取的接口设备

            c    串行端口的接口设备

            s     数据接口文件  /var/run

            p    数据传输文件

        22.linux目录配置 的依据---FHS

            /     开机系统有关

            /usr   软件安装/执行有关

            /var   系统运作有关


            而这三层目录下的结构又有规定：

            /  下应该有  /bin---单人维护模式还能被操作的指令；

                             /boot 开机会使用的档案

                             /dev

                             /etc   系统的主要配置文件；/etc/init.d/---所有服务的预设启动script；/etc/xinetd.d/---super daemon管理

                             的各项服务的配置文件；/etc/X11---X Window有关配置文件

                             /home  用户家目录

                             /lib  函式库，开机会用到的函式库

                             /media  可移除的装置

                             /mnt   暂时挂载某些额外的装置

                             /opt    第三方软件

                             /root   root家目录
            
                            /sbin   为开机过程所需要的，至于某些服务器软件 程序，一般放在在/usr/sbin ，本机自行安装的系统执行文件则放置在

                            /usr/local/sbin下

                            /srv     一些网络服务启动之后，需要取用的数据目录

                            /tmp   让一般用户或者是正在执行的程序暂时放置档案

                            
                            另外的
                            
                            /lost+found


                            /proc   虚拟文件系统，放置的数据都是在内存当中

                            /sys     类似/proc
            
            开机仅会挂载根目录，因此与开机过程相关的目录不能和根目录挂载到不同的分割槽

            /usr目录：可分享不可变动，FHS建议所有软件开发者应该将它们的数据合理的放在此目录下

                            /usr/X11R6    X Window重要数据所放置的位置

                            /usr/bin    绝大多数用户可使用的指令

                            /usr/include    头文件

                            /usr/lib   各应用软件的函数库、目标档案，以及一些不被一般使用者习惯的执行档或脚本

                            /usr/local    非distribution默认提供的软件

                            /usr/sbin     非系统正常运作所需要的指令

                            /usr/share    不分硬件架构都能读取的数据

                            /usr/src    原始码

            /var目录：   针对经常性变动的档案，包括cache、登陆档

                            /var/cache   暂存档

                            /var/lib    程序本身执行过程中，需要使用到的数据文件放置的目录

                            /var/lock   上锁

                            /var/log    登陆档

                            /var/mail   也被放在在/var/spool/mail

                            /var/run     程序或服务启动后，放置PID

                            /var/spool     队列数据
        23.目录树

            每一个目录不止能使用本地的partition的文件系统，也能使用网络上的filesystem
            
            LSB  (Linux  Standards Base),制定应用程序与运行环境之间的二进制接口

        24.路径相关的操作

            .   ..   

            -前一个工作目录

            ~用户家目录

            ~account家目录

        cd /var/mail&&pwd -P

        mkdir -p  test1/test2  建立多级目录

        mkdir -m 711 test2    建立目录时分配初始权限

        rmdir 只能删除空的目录

        $PATH

        25.文件和目录的查看

            ls的各种参数，l长信息形式查看
            
            cp -a    -i覆盖前进行确认

            建立连接档：cp -l   cp  -s

            有差异时才会复制：cp -u

            cp -d   复制连接文件，而不是源文件

            rm

            在指令前加反斜杠可以忽略alias

            如果文件名引起歧义，就使用完整路径名来删除


            mv

            搬移文件  变更档名


            rename指令？？

        26.获取路径的文件名和目录名，查看文件内容

            basename   dirname 获取路径名和文件名

            cat  -b 列出行号   -n  打印出行号   -v列出一些看不见的特殊字符    -E结尾的断行符显示出来  -T显示Tab键

            -A  相当于-vET的整合   Concatenate--连续

            tac  反向cat

            nl（添加行号打印）

            more    b往回退      enter前进      /字符串搜索

            less  man文件的功能实现就是使用这个工具


        26.head  tail od

            head -n     tail -n    其中n可以是负数

            加上-f参数会不停的更新侦测的信息

            od查阅非文本文件，od -t  TYPE

        27.mtime  ctime   atime各自代表的含义

            touch更新时间
       
        28.文件和目录的默认权限和隐藏权限

            默认权限 umask -S

            预设：建立文件呢666，建立目录777，然后考虑umask的设定值
            
            umask后跟数字即可改变对应的预设权限

        29.文件隐藏属性
            
            chattr

            linux在2.6以上的都可以执行此命令但是并不是适用于所有目录，/、/dev、/tmp、/var不能保护

            lsattr

            chattr [-RVf]  [-v version] [mode] files
            
            -R递归处理所有的文件及字母及子目录

            -V详细显示修改内容，并打印输出

            其中的mode：

            A：文件或目录的atime不可被修改

            S：IO磁盘同步选项，功能类似sync

            a：只能向文件中添加数据，而不能删除

            c：压缩后存储，读取时自动解压

            d：不能成为dump程序的备份目标

            i：设定文件不能被删除、改名、设定链接关系，同时不同写入或新增内容

            Not all flags are supported or utilized by all filesystems;refer to filesystem-specific man pages such as btrfs,

            ext4(5),and xfs(5)for more filesystem-specific details.

        30.档案特殊权限
        
            SUID---s出现在档案拥有者的x权限上：

            仅对二进制程序有效

            执行者需要对该程序具有x的权限

            本权限仅在执行过程有效

            执行将拥有该程序拥有着权限

            /usr/bin/passwd     /etc/shadow


            SGID---s出现在档案群组的x权限上：

            SGID可以针对目录或档案设定。如果针对档案，对二进制有用，程序执行者需具备x，执行者在执行过程会获得群组支持

            /usr/bin/locate      /var/lib/mlocate/mlocate.db

            用户在此目录下群组为该目录群组，新建的档案，群组与该目录群组一致


            SBIT---只对目录有效

            /tmp，用户只能删除自己的内容，不能删除别人的内容

            设定这三个权限，同样是chmod，最前面加上一个数字  4 2  1

        31.观察文件类型，搜索文件

            file

            which -a command寻找执行档

            whereis -bmsu  档案或目录名  linux会将系统内所有档案记录在一个数据库档案里

            whereis  和locate借助这个数据库来进行检索

            locate -ir    /var/lib/mlocate  底下的数据库   updatedb  会读取/etc/updatedb.conf进行更新

            find  与时间有关的选项：-mtime   -ctime   -atime   -newer  

            与使用名或组名有关的参数：-uid   -gid   -user  -group   ........（有些档案没有用户和群组？？？）

            与档案权限有关的参数：-name  -size[+-]SIZE,-type TYPE,-perm mode   -perm +mode  -perm -mode

            额外可进行的操作：-exec command         find / -perm +7000 -exec ls -l {} \;

        32.磁盘分割的概念：

            主要分割和延伸分割最多可以有四笔（硬盘限制）

            延伸分割最多只有一笔分割（操作系统限制）

            格式化：每种操作系统所设定的文件属性/权限并不相同，为了存放这些档案的数据

            传统的磁盘与文件系统的应用中，一个分割槽只能够被格式化为一个文件系统，但是随着新技术的利用，

            lvm  raid，可以将一个分割槽格式化为多个文件系统。

            superblock：记录此filesystem的整体信息

            inode：记录档案的属性，一个档案占用一个inode，同时记录此档案的数据所在的block号码

            block：记录档案的实际内容

        33.ext2文件系统

            一个inode至少记录：rwx   owner/group   size  ctime/atime/mtime   文件特性的flag（如SUID）  文件真正内容的指向

            inode大小固定为128bytes(新的ext4与xfs可设定到256bytes)，记录一个block号码花费4byte（12直接+1间接+1双间接+1三间接）

            128bytes的inode，1k的block

            12*1K + 1K/4bytes*1k+1k/4bytes*1k/4bytes*1k+1k/4bytes*1k/4bytes*1k/4bytes*1k
            =12k+256k+256*256k+256*256*256k
            =16GB
        
            superblock:一般为1024bytes，block和inode总量、未使用与已使用的inode/block、block与inode的大小、filesystem的

            挂载时间、最近一次写入数据的时间 、最近一次检验磁盘的时间等、一个valid bit，1代表挂载

            dumpe2fs

            FileSystem Description：

            block bitmap：记录block使用情况

            inode bitmap：记录inode使用情况

            blkid 装置中被格式化的装置

            目录：文件系统会分配一个inode与至少一块block给该目录，inode记录该目录的权限与属性，block记录文件名与文件名占用的inode

            新增文件时的数据不一致问题：

            寻找inode、block，使用数据填充inode、block，回写inode bitmap 和block bitmap

            日志式文件系统：filesystem中规划一个区块，专门记录写入或修订文件的步骤

            异步处理：内存中文件如果被修改过，设定为脏，系统会不定时的将dirty数据写回磁盘

            cat /proc/filesystems

            ls -l /lib/modules/$(uname -r)/kernel/fs

            VFS:管理linux上的系统

            xfs文件系统：data section（类似block group、分为多个存储区群组） inode和block都是使用时，才动态配置产生的

            log section 可以指定外部系统作为xfs文件系统的日志区

            realtime section 文件被建立时，xfs会在此区段找一个到数个extent区块，等分配完成后，在写入到data section

            xfs_info 装置|挂载点

            df  -akTi    在df后加文件或目录，会自动分析属于哪个portion    读取superblock信息


            du  -sm /*

    33.实体链接和符号链接

            hard link   只是在目录下新增一笔档名链接到inode号码

            不能跨filesystem，不能链目录


            symbol link  建立一个独立的文件，这个文件的读取指向link的文件档名

    34.磁盘的分区、格式化、校验与挂载

            lsblk 列出所有磁盘

            blkid  

            parted

            gdisk

            partprobe -s更新linux核心的分区信息

            mkfs.xfs  装置名

            grep 'processor' /proc/cpuinfo

            mkfs.*建置不同的文件系统

            进行磁盘校验：xfs_repair、fsck


            mknod????

            xfs_admin  tuue2fs修改label name与UUID

    35.文件系统的挂载与卸除

            mount -o后的参数：async，sync；ro，rw；.........defaults

            mount -o remount,rw,auto  / 重新挂载根目录

            可以将一个目录挂载到另一个目录

            umount

            /etc/fstab中各个参数的含义：最后数字---是否能被dump使用、是否以fsck检验扇区

            是开机时的配置文件

            实际fs的挂载是记录到/etc/mtab  /proc/mounts

            制作大型文件，格式化挂载 dd  mkfs.xfs mount -o loop

            使用实体分区槽或虚拟文件建置swap

            mkswap  free swapon swapoff

            ll -sh

            parted分区指令

    36.压缩，打包与备份
    
            tar---将多个文件打包成为一个文件

            .Z  .zip  .gz  .bz2  .xz---压缩文件   compress zip   gzip   bzip2   xz程序压缩过的文件


            gzip可以解开compress zip与gzip等软件产生的压缩文件

            zcat   zgrep  zmore  zless    gzip取代compress 

            bzip2 bzcat/bzmore/bzless/bzgrep  bzip2则是为了取代gzip并提供更好的压缩比


            xz xzcat/xzmore/xzless/xzgrep  


            tar 配合几种压缩软件的使用  -P不去除根目录  -C指定解压的目录

            只解开其中的一个文件

            备份比某个时刻之后更新的文件

            tar除了可以将资料打包成为文件之外，还能够将文件打包到其他装置

            tar -cvf - /etc | tar -xvf -

    37.xfs文件系统的备份与还原
    
        xfsdump   xfsrestore

    38.其他备份方式

            dd,可以读取磁盘装置的内容，然后将整个装置备份成一个文件

            cpio  

    39.vi与vim

            
            vi的三种模式

            一般指令模式 一般指令列模式   编辑模式

            vim的暂存档  .filename.swp

            区块选择：v  然后d y p    v与ctrl+v还是有区别的 
            
            
            多文件编辑：:n  :N不同文件进行跳转

            多窗口功能：sp [filename]开另外一个窗口  ctrl+w进行切换

            关键字补齐：ctrl+x 然后ctrl + o

            vim环境设定记录：~/.vimrc,~/.viminfo

            :set all各项关于vim使用的设定

            linux和dos下换行符的转换 unix2dos

            编码转换 iconv   

    40.bash

            /etc/shells

            /bin/sh(已被/bin/bash取代)
            /bin/bash(linux预设的shell)
            /bin/tcsh(整合C Shell)
            /bin/csh(已被/bin/tcsh替代)

            登陆取得的shell就在/etc/passwd中

            bash的优点：

                history

                命令和文件补齐功能

                命令别名设定

                工作控制、前景背景控制

                shell scripts

                通配符

            type 查询是否为内建指令

            type -tap

            \跳脱一个字符 

            ctrl a   ctrl e  (到首  到末)     ctrl  u    ctrl  k（删除）

    41.变量

        echo 取用变量    echo $变量名    echo   ${变量名}

        变量的设定  =  等号两端不能有空格

        unset  取消设定的变量

        ""   ''    ``    三者的区别 ：第一个中会执行变量的解析，第二个不会，第三个会执行指令

        $(command)和`command`类似

        环境变量：env     export

        set  也可以查看

         PS1

         $本shell的PID

         ？上个指令的回传值

         OSTYPE    HOSTTYPE    MACHTYPE

         导出变量到后面的程序

         locale

         当启动一个shell时，OS会分配一个记忆区块给shell使用，此内存内变量可让子程序使用

         若在父程序利用export功能，可以让自定义变量的内容写入到上述的记忆区块中

         当加载另一个shell时，子shell可以将父shell的环境变量所在的记忆区块导入到自己的环境变量区块

         read   -p提示语   -t 宣告


         declare  -a    -i    -x    -r    表示定义变量的类型

         变量类型默认为字符串   bash中的数值运算预设最多只能达到整数形态

         declare -p variable   显示变量的类型

         ulimit限制用户使用的系统资源

         一般使用者使用ulimit设定了-f的大小，就只能继续减小

         变量内容的删除：${variable#/*:}删除最短的、${variable##/*:}删除最长的  从前面开始删除

         %、%%从后面开始删除

         变量内容的取代：${variable/或//word1/word2}

         变量的测试和内容替换：variable=${variable1:-variable2} 若variable没有被声明或为空，则为variable2

         ???????

         别名设置和别名的清除

         history命令

         -a新增的history指令新增到histfiles中

         ！number   ！command   ！！  执行历史命令


         BASH shell的操作环境：

         指令搜寻的顺序：alias-->builtin-->PATH

         Bash的进站和欢迎信息：/etc/issue,/etc/motd

         42.login与non-login shell

         前者需要有完整的登入流程，后者则不需要

         login shell只会读取：

                 /etc/profile:系统整体的设定 读懂这个脚本？？？？
                 ~/.bash_file或~/.bash_login或~/.profile，属于使用者个人设定
        
        source命令或  .   重新读取配置

        non-login shell只会读取~./bashrc

        终端机的环境设定：stty、set设定（-为其设定值）

        43.通配符和特殊符号

        * 0到无穷多个        ？一定有一个        []     [-]    [^] 
        
        44.数据重定向

        stdin    0    <     <<

        stdout  1   >     >>

        sterr   2   2>    2>>

        /dev/null 垃圾桶装置

        2>&1  &>    错误和输出都导入到同一个文件

        cat  > catfile << "eof"   ???????

        45.命令执行的判断依据

        ；&& ||

        46.管线命令

        必须能够接收stdint的数据

        cut  对每一行字符串进行分割或者裁剪    cut -d '' -f  数字       -f    -b    -c     N-    N     N-M    -M

        last

        grep

        sort排序：sort   -t  ':' -k  3

        uniq : last | cut -d '  ' -f 1| sort | uniq

        wc显示有多少行

        tee双重导向

        tr:删除或替换

        col:tab取代为 空白

        join:根据关键词进行拼接

        paste:直接拼接，中间用tab断开

        expand：将tab转换为空格       unexpand：将空格转换为tab

        参数代换：xargs

        cut -d ':' -f1 /etc/passwd | head -n 3 | xargs -e'lp'  -p -n 1 id 

        很多指令不支持管线命令，可以通过xargs提供该指令引用stdin

        47.正则表达式


            sed命令： nl /etc/passwd | sed -n 'a1 ddd'

            sed '/s /reg1 /reg2 /g'  根据正则进行整行的替换

            sed -i可以直接在文件里替换

            延伸正则：

                +  ？  |   （）   （）+

            printf格式化打印：printf '%10s \t %5i \t %5i \t %5i \t %8.2f \t \n' $(cat printf.txt|grep -v Name)


            awk命令：比较倾向于一行中分成数个字段处理

            awk '条件类型1 {动作1} 条件类型2 {动作2}'  filename

            awk主要处理每一行的字段内的数据，默认的字段分隔符为“空格符”或“tab键”

            awk涉及的内建变量：$0  $1 ........   $0整行数据    $1代表分隔的第一个变量

            NF字段总数    NR目前所处理的是第几行    FS目前的分隔字符

            awk的处理流程：
            
                读入第一行，并将第一行的资料填入$0,$1,$2等变量

                依据条件类型的限制，判断是否需要进行后面的操作

                做完所有的动作与条件类型

                若还有后续的行数据，重复上述步骤

                cat /etc/passwd | awk ' BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'

                cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s \n",$1,$2,$3,$4,"Total"} 
                NR>=2{total=$2+$3+$4;printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'

            48.文件对比工具

                diff  行作为单位来对比的  可以对比文档，也可以比对目录

                diff -bBi from-file  to-file

                form-file  to-file都可以用-取代

                cmp  字节为单位去比对

                patch 以diff制成补丁档，然后用patch替换旧档  -R还原

                pr  文件打印准备

            49.shell scripts

                将一些shell的语法与指令（含外部指令）写在一个纯文本文件，搭配正则、管线命令和数据流重导向等功能

                达到管理机器的目的

                自动化管理、追踪管理系统的重要工作、简单入侵检测、连续指令单一化、简易的数据处理

                #！/bin/bash  宣告这个文件内的语法使用bash的语法，执行时就能够加载bash相关的环境配置文件

                vim    ：sp 多窗口                

                scripts执行方式的差异

                source      sh script     ./script   三种方式的区别

                test指令：不同参数

                [   ]中括号判断，两端必须是空格，其中每个组件都需要有空格来分隔，其中的边数最好都以双括号

                中括号与test的使用几乎一摸一样

                /path/to/scriptname   opt1  opt2   opt3  opt4

                        $0                            $1    $2        $3     $4

                $#  参数个数     $@            $*
                
                shift的作用：去除参数并对$#等进行重新赋值

                if [  条件判断式 ]；then

                fi

                case variable in
                    "variable1")
                    
                    ;;                
                    "variable2")
                    
                    ;;                
                    *)

                    ;;
                esac

                function功能以及function内建变量与bash shell scripts内置变量是不同的

            builtin

            while [ condition ]
            do
            done

            until [   ]
            do
            done

            for var n con1 con2 con3
            do
            done

            for ((初始值；限制值；执行步阶))
            do
            done

            结合数组使用

        50.shell script的追踪和debug

            -x  -n  -v参数

        51.账号管理和ACL权限设定

            man page的数字数字约定：1用户在shell环境可以操作的指令或可执行文件，2系统核心可呼叫的函数与工具，

            3一些常用的函数与函式库，4装置文件的说明，5配置文件或某些文件的格式，6游戏，7惯例与协议，8系统管理员可用

            的指令，9与kernel相关的文件

            man  -f  man 

            查看一个man文档的顺序以及侧重点

            whatis=man  -f  mandb建立数据库

            apropos=man -k

            info

            /usr/share/doc


        52./etc/passwd、/etc/shadow、/etc/group文件结构

            UID范围分配的惯例

            /etc/shadow：

            Each line of this file contains 9 fields:

            1.login name

            2.encrypted password:  crypt(3)

            3.date of last password change

            4.minimum password age(compare with 3)

            5.maximum password age(compare with 3)

            6.password warning period(compare with 5)

            7.password inactivity period(compare with 5)

            8.account expiration date

            9.保留字段

            "3"之后"4"天才可以在此修改密码，"3"必须在"5"天内修改密码，过期后"7"天仍可以，过了这个期限就会过期

            "8"账号失效日期

            authconfig --test  | grep hashing ?????  authconfig-tui

            有效群组和初始群组的概念

            groups  输出的第一个即为有效群组

            newgrp 切换有效群组   重新启用了一个shell

            /etc/gshadow的文件结构    组名   密码   群组管理员账号   该群组支持的所属账号


        53.账号管理

            useradd     linux如何反编译elf文件？？？

            /etc/default/useradd  默认设定

            私有群组机制和共有群组机制（不用的distribution设定不同）

            /etc/skel为建立家目录的基准

            /etc/login.defs

            passwd 修改密码

            /etc/pam.d/passwd


            passwd -S      -u          -l

            chage   可以更详细的查看账号的密码信息

            将last day 修改1970，会强制性要求的修改密码

            usermod  修改用户账号的详细信息

            shell builtin相关文档的解读？？？？
            
            userdel
            
            id  finger chfn  

            chsh -l列出所有shell  /etc/shells   -s设定修改自己的shell

            groupadd   groupmod   groupdel


            gpasswd

            外部身份认证系统：authconfig-tui

            ACL：更细的权限的划分

            dmesg | grep -i   acl

            getfcal   setfacl   -m设定  -x删除    u、g、m跟着的含义，m代表有效权限   

            使用者身份切换:

            su  -l 等参数  -l的参数的含义
            
            sudo    /etc/sudoers    visodu  通过alias设置/etc/sudoers

            set env  export的区别？？？？

            PAM模块

            验证类别    控制标准      PAM模块与该模块的参数

            PAM的实践和总结？？？？？

            常用PAM模块提供的功能和流程

            /var/log/secure    /var/log/messages

            w    who    last   lastlog

            write    mesg   wall    mail


            pwck

       54.例行性工作排程
       
            atd ---  突发的         crond ---  周期性的

            linux周期性的工作：logrotate进行登陆档的轮替、logwatch进行登陆的分析、/var/lib/mlocate  周期性的updatedb

            man page的mandb建立、rpm数据库的建置、移除暂存档、网络有关的分析行为

            at：将工作以文本文件的方式写入/var/spool/at/目录   限制at的配置 /etc/at.deny  /etc/at.allow

            at会将工作独立出bash环境中

            不管at还是cron，最小单位都是分钟

            crontab指令建立的工作会记录到/var/spool/cron    /var/log/cron

            系统shell scripts学习和总结

            crontab -l  查看   -e编辑   -u为指定user建立排程   -r移除所有

            crontab中  *  ， -  /n的配合使用
            
            crontab是针对一般使用者设计的，系统的排程在/etc/crontab

            crond预设的配置读取位置  /ect/crontab  /var/spool/cron   /etc/cron.d    都是一个存在的ascll文件

            每一行都是一个工作安排

            /etc/cron.hourly下的脚本是crond ，而其他的weekly等则有anacron执行

            anacron的设定意义: /etc/anacrontab

            cron排程的流程？？？？

        55.进程管理与SELinux初探

            fork and exec

            job control：每个工作都是目前bash的子进程

            前景和背景的概念：&   ctrl+z将工作丢到背景里运行；jobs观察背景里的工作状态；fg，将背景里的工作提升到前景

            %number 代表第几个在背景里运行的工作
            
            bg % number  让背景里暂停的工作运行

            kill  -signal  %jobnumber   man  7 signal

            kill后默认跟的是pid

            nohup

            ps -l    ps aux  各个行项目的含义

            top -d数字  各个项目的意思

            pstree

            priority   nice

            pri(new) = pri(old)+nice   pri由系统控制

            free观察内存使用情况

            uname   系统与核心相关信息

            uptime   观察系统启动时间与工作负载

            netstat   追踪网络或插槽文件  netstat -tulnp

            dmesg   分析核心产生的信息

            vmstat    

            SGID   SUID   SBIT与进程PID有关

            /proc/*下各目录代表的意义：

            fuser藉由文件或文件系统找到使用该文件的进程

            lsof查出某个进程使用的文件

            pidof 某只正在执行的程序的pid

            VM虚拟机未正常关闭问题解决

        56.SELinux
        
            Securitty  Enhanced Linux，整合到了核心

            Discretionary Access Control    根据进程的pid（权限） 借由进程和预设权限来处理文件资源

            Mandatory Access Control        针对特定的进程的特定的文件资源来进行权限的控管，此时控制

            的主体由使用者变更为进程。每个文件资源也有针对该主体进程设定可取用的权限。SELinux就提供

            一些预设的政策，并且在政策里提供了多个规则

            主体 目标  政策   

            安全性本文：主体和目标的安全性本文必须保持一致，才能够顺利存取

            主体必须要通过SELinux政策内的规则放行后，才能够与目标资源进行安全性本文的比对

            只有通过比对，才能够访问对应的资源

            进程的安全性本文放置在内存中，文件资源的安全性本文存放在inode中

            ls -Z 查看安全性本文  

            身份识别  unconfined_u   system_u

            角色：object_r    system_r

            类型：文件上称作type 进程上称作domain

            ps -eZ      ll -Zd

            getenforce

            sestatus 

            setenforce

            restorecon -Rv 重新还原所有selinux的类型

            getsebool 

            seinfo 查看总体的信息
            
            sesearch [-A] [-s 主体类别][-t 目标类别][-b 布尔值]

            semanage boolean -l  | grep httpd_enable_homedirs

            某个boolean里包含多个文件、目录读取的规则

            setsebool -P

            chcon 修改文件的selinux type

            semanage查询预设的安全性本文

            为某个目录指定安全性本文
        
        57.系统服务

            早期SystemV的init脚本处理方式

            服务的启动、关闭、观察都是使用/etc/init.d底下的脚本

            服务的分类：standalone---常驻内存；super daemon---由特殊的xinetd或inetd提供socket对应或port对应的管理

            服务的相依性问题：

            执行等级的分类：init是开机后核心呼叫的，然后init根据用户的执行等级来唤醒不同的服务,/etc/rc.d/rc[0-6]/Sxxdaemon

            /etc/init.d  /etc/rc0.d等都是链接到/etc/rc.d/下

            CentOS 7.x后，RedHat系列放弃里沿用多年的SystemV，转用systemd

            平行处理所有服务、服务相依性的自动检查、快速响应的on-demand启动方式、依daemon功能进行分类

            将多个daemon集合为一个群组、向下兼容init的启动脚本

            /usr/lib/systemd/system/

            /run/systemd/system/

            /etc/systemd/system/

            systemd下的各种不同的服务类型:

            systemctl mask的含义与用法

            systemctl enable只是在/etc/systemd/system/*创建一个通往/usr/lib/systemd/system/*的链接档

            systemctl list-unit-files   systemctl list-units

            systemctl   get-default

            通过systemctl分析服务相依性systemctl  list-dependencies

            几乎所有的服务都会将初始化参数放置在/etc/sysconfig

            systemctl list-sockets

            /usr/lib/systemd/system  下文件设定的含义

            getty@service的便捷设定？？？？ 传入变量来使文件的配置更加智能化

            /etc/systemd/logind.conf 
        
            timer.target协助处理定时任务

            关机后超期的timer如何处理？？？？？？

            firewalld   取代   iptables？？？？？

            rc-local服务 和/etc/systemd/system/rc.local

        58.登陆档的分析

            /var/log/* 系统运作产生的各种登陆信息


            journalctl    rsyslog

            /etc/rsyslog  man 3 syslog

            rsyslog管理的登陆档只要被vim access过，就无法在记录，需要重启

            设定登陆档管理服务器

            /etc/logrotate.conf            /etc/logrotate.d/

        59.系统基本设定与备份策略

            nmcli????

            hostnamectl

            timedatectl    hwclock

            ntpdate 校准时间

            localectl    locale  语系设定

            firewalld

            dmidecode解析硬件设备

            lspci  pci总线相关装置  /usr/share/hwdata/pci.ids        /proc/bus/pci      update-pciids
            
            lsusb

            iostat -d 2 3 sda

            备份策略：

        60.软件备份

            Tarball   源代码文件、侦测程序文件、简易说明打包成一个文件

            函式库的管理：

            静态函式库--扩展名为.a    编译时直接整合到执行程序中

            动态函式库--扩展名为.so     单独存放，路径不能改变，绝大多数函式库存在 /lib64   /lib

            linux中很多函式库其实在kernel中提供，存在/lib/modules中

            ldconfig   /etc/ls.so.conf/   将一些动态函式库载入内存中

            ldd  解析动态函式库

            yum进行软件的管理：

            rpm  和  srpm（Source RPM，需要先编译，然后才能安装）

            rpm包的含义  rp-pppoe-3.11-5.e17.x86_64

            RPM：包含已经编译过的程序与配置文件数据、安装时会进行环境的检测、使用数据库记录RPM
            
            文件的相关参数

            yum  解决软件依赖的问题

            /var/cache/yum     /var/lib/rpm/

            软件安装的默认位置

            man   rpm  ？？？？？

            man  yum

            /etc/yum.repos.d    /etc/yum.conf


        加强shell scripts的训练以及一些重要工具的man文档的仔细阅读

        开机流程分析：
        
        BIOS通过硬中断读取MBR的

        每个操作系统默认是会安装一套boot loader到它所在分区的filesystem中，也是第一个扇区





    </pre>
    <img src="./images/1.PNG" />
    <img src="./images/2.PNG" />
    <img src="./images/3.PNG" />
    <img src="./images/4.PNG" />
    <img src="./images/5.PNG" />
    <img src="./images/6.PNG" />
    <img src="./images/7.PNG" />
    <img src="./images/8.PNG" />
    <img src="./images/9.PNG" />
    <img src="./images/10.PNG" />
    <img src="./images/11.PNG" />
    <img src="./images/12.PNG" />
    <img src="./images/13.PNG" />
    <img src="./images/14.PNG" />
    <img src="./images/15.PNG" />
    <img src="./images/16.PNG" />
    <img src="./images/17.PNG" />
    <img src="./images/18.PNG" />
    <img src="./images/19.PNG" />
    <img src="./images/20.PNG" />
    <img src="./images/21.PNG" />
    <img src="./images/22.PNG" />
    <img src="./images/23.PNG" />
    <img src="./images/24.PNG" />
    <img src="./images/25.PNG" />
    <img src="./images/26.PNG" />
    <img src="./images/27.PNG" />
    <img src="./images/28.PNG" />
    <img src="./images/29.PNG" />
    <img src="./images/30.PNG" />
    <img src="./images/31.PNG" />
    <img src="./images/32.PNG" />
    <img src="./images/33.PNG" />
    <img src="./images/34.PNG" />
    <img src="./images/35.PNG" />
    <img src="./images/36.PNG" />
    <img src="./images/42.PNG" />
    <hr>
    <p>
        <b style="color: red;">《鸟哥的linux私房菜 基础篇》</b>
    </p>
    <hr>

    <hr>
    <b style="color: red;">《Linux就是这个范儿》</b>
    <hr>
    <pre style="line-height: 20px;">
        1.管道是Linux系统提供的多任务协调机制的一种，IO重定向也是一种linux提供的多任务协调机制
        对于命名管道，重定向时需要显式重定向

        2.要想程序支持流式处理，只需要从stdin获得输入，输出到stdout即可

        3.根文件系统设计的理念：

        4.文件系统的组织：

        "["是一个程序？？？？

        如果安装了某个C预处理器，/lib/cpp必须是它的链接

        /srv？？？？

        任何主机专有的或随时间变化的信息只能存放在其他地方，即使大型软件包，也不得占用/usr下的一个目录

        搜寻时，局部总是由于全局的

        3.shell脚本的问题：

        tr的用法  -d删除   不带参数为替换    -s删除重复的字符

        -c用于限定set  

        当发生traslate时，默认会将set2与set1对齐，忽略set2多余的，将set2最后一个字符重复
         如果加上了-t选项，则会将set1进行截断

        sed的使用：

        if no -e ,--expression ,-f,or --file option is given ,then the first no-option argument is taken as the set

        scripts to interpret.All remain arguments are the names of input files ;if no input files are specified,then
        standard input is read

        sed  [OPTION] .... {script-only-if-no-other-script}[input-file]

        {script-only-if-no-other-script}里的定义

        1.Zero-address  commonds

        2.Zero- or One- adrress commonds

        3.adress ranges commonds
        
        其中的adress：

        number    first~step   $       /regexp/       \cregexpc
        
        学习linux其他的一些推荐书籍？？？

        awk的使用：基于模式/行为，模式可以是正则，行为中可以使用定义的语法编写

        还有一些自定义的内置变量，还可以call外部的函式库。（一种微型语言，和shell类似）

        针对于shell的局限？？？

        做任何事都必须有依据，做任何事都必须有理。

        gawk  -  pattern scanning and processing language

        is the GNU Project's implementation of the AWK programming language.?????

        bash shell      .file---文件包含        

        eval??????

        built-in命令：

        把文档当作数据库的awk：

        awk [-F fs] [-v var=value]  [-f profile | 'prog']  [file ...]

        模式驱动编程。

        模式和行为可以省略掉一个，如果省略模式,则行为将被 应用到每条输入记录；
        如果省略行为，则默认操作是在标准输出上打印 匹配到的记录。

        awk提供了两个特殊的模式，BEGIN，END，类似构造函数和析构函数

        字符串：NULL字符结尾，使用 "" 包含起来,可以包含任何字符，遇到所有bit都是0的
        字符就截止。不能处理二进制文件，gawk可以

        awk是自动分配和回收内存的，awk也提供了很多内置函数进行字符串的处理

        数值：浮点数？？？，也内置了很多用于数值的函数

        变量：标量（保存单一值）、数组（保存多个值，但是类似于字典的概念）

        变量名的定义规范：内置变量全大写，局部变量小写，全局变量首字母大写

        提供一些内置变量（包括描述系统环境的、命令行参数和环境变量）

        行为语句：选择分支、循环
        
        数组的操作语句：in    ！

        输出重定向   从一个获取输入时需要手动关闭该文件（命令行的重定向会自动处理号文件关闭）

        利用awk的管道可以直接调用linux命令，天然的可以做各种函式库的胶合剂

        awk还提供了system函数实现了另外一种调用外部程序的方式？？？？？？

        输入控制：getline  配合管道、重定向使用

        next   nextfile（类似于多个if时的continue）

        bc和dc：两个微型语言,都有选择分支和循环,拥有图灵完备的特性。这两个程序可以做任意复杂的数学运算,

        并且可以作为其他程序的从属进程，可以很好一个扩展

        dc:Unix世界中最古老的语言，比c语言还早，使用逆波兰式来表达算式

        bc作为dc的前端，bc只是将代数标记的表达式和类似c的程序语句翻译成dc能够处理的逆波兰式和命令，而bc和dc

        的通信就是简单的管道

        更为现代的，linux提供的gun版本的，类似java虚拟机？？？？？

        常用的代数表达式，是中缀表达式，逆波兰式则是后缀表达式，计算机能够很方便的处理逆波兰式

        一直到现在，所有的高级语言在处理数学表达式时，依然将它们转换为逆波兰式，具体就是借用堆栈

        dc和bc的深入理解！！！！！

        M4

       4.linux中的编辑器

        "韧"、"毒"、"黑"：vi 和 emacs

        vi中一些高级的使用方法:

        宏？？？？？ 配置成ide？？？？？？

        emacs？？？？？ 

    5.Makefile

        自动化编译   一个优秀的IDE隐藏了太多的工程管理细节

        makefile对java也提供了良好的支持

        makefile是make工程管理工具的工程描述文件,make是类Unix世界的一个传统工程管理工具.

        Linux采用GNU Make体系，是所有体系中功能最为丰富的、兼容性最好的一个Makefile文化传承品

        linux内核的编译是有两个强依赖的：GNU Make ，gcc

        Makefile并不是make的唯一选择，还可以是makefile和GNUmakefile

        --file用于指定makefile，-d用于调试makefile   -t输出执行报告（并不会真正执行构建）

        目标：条件
            命令

            myless.o:myless.c line.h buffer.h tools.h tedef.h
                    	cc -c -o myless.o myless.c
        要生成myless.o,需要有myless.c   line.h   buffer.h    tools.h   tedef.h

            底下是具体的执行命令

        只有那个文件发生了修改，make才会重新编译

        目标1 目标2 目标3 ......:条件1 条件2 条件3

                            命令1
                            命令2
                            命令3
        命令的开头必须tab ，可以使用折行

        标准规则：目标：条件   命令

        隐式规则：从条件生成命令   -p查看所有隐式规则

        make中支持宏的使用

        自动变量：不用定义还会随着上下文的不同发生改变(类似shell中的内置变量)

        假目标：不生成目标文件（有时将目标代表一系列命令）

        VPATH  vpath

        文件包含：

        make中也可以使用shell命令

        MakeFile的学习！！！！！！！！！！！

                                                            
                                                            文件系统篇章

        用以前完全不可能的方式处理问题

        元数据:为文件系统提供特定的身份和性能特征，元数据是交给文件系统的驱动程序来使用的

        文件系统是项目，类型是方案,驱动程序就是执行人

        fsck 在linux启动时，根据/etc/fstab检查，fsck会修正文件系统的不正确数据

        日志:一个更好的解决方案,文件系统的日志记录对元数据的操作.fsck遇到日志式文件系统，直接放行

        有文件系统驱动程序根据日志记载进行恢复

        ReiserFs：一个最好文件系统，不单能管理好用户的文件，还能干点别的，例如数据库

        关注小文件的性能，“针对问题进行创作”本来就是愚蠢的。处理大文件也不会有什么性能损失

        采用B树的数据结构来组织元数据，整个磁盘分区就相当于一个B树

        procfs：启动时动态生成的文件系统，用于用户空间通过内核访问进程信息,

        “9号计划”，构建一个分工合作的环境，比如单独使用一台极强运算能力的计算机用来为远程终端提供运算服务

        同时另有一台专门的机器用来完成存储所有文件的任务。？？？？？

        /proc/sys目录，可以改写，起到修改内核参数的作用 sysctl

        中断平衡策略：

        /proc/self:任何程序访问这个目录都会得到和自己一直的/proc/pid目录，/proc/pid/exe执行的程序名

        free  sync    /proc/sys/vm/drop_caches写入不同的数值代表不同的含义

        tmpfs：

        ramdisk--将一部分固定大小的内存当作分区来使用，ramdisk做页面缓存

        把程序产生的临时文件放入rawdisk中

        tmpfs既可以使用内存，又可以使用交换分区,使用虚拟内存子系统的页面来存储文件

        tmpfs是直接建立在vm之上，直接使用mount就可以挂载
        /dev/shm 线程的tmpfs    

        devfs和sysfs：

        设备不是简单的隐藏在晦涩的api之后,而是真正的与普通文件、目录或符号链接一样，存在于文件系统之上（9号计划）

        devfs：设备文件系统，唯一的目的就是提供一个新的，更合理的方式管理位于/dev目录下的所有块设备和字符设备

        给驱动开发人员提供了一个叫devfs_register()的内核API，可以接收一个设备名称作为参数,调用成功后，在/dev目录下

        会出现与设备名相同的文件名。

        一旦所有设备驱动程序启动并向内核注册适当的设备，内核就启动/sbin/init进程,初始化脚本开始执行，启动过程初期，
        
        rc脚本将devfs文件安装在/dev中，这样/dev就包含了devfs所表达的所有设备映射关系

        devfs??????????

        sysfs的用户空间工具udev在用户空间实现了和devfs同样的功能

        RelayFS:从内核空间向用户空间反馈大量数据

        debugfs：基于relay技术

        Boot Selector:MBR  DPT   BRID组成，分别为446字节、64字节、2字节

        GPT  GUID     分区表的结构？？？？？？

        Bootloader：Grand Unified Bootloader，公认

        操作系统内核运行之前的一小段程序，负责将操作系统内核装入内存，然后将控制权交由OS

        还会搜集电脑的硬件信息、初始化硬件设备、安排内存布局等

        linux早期发行版,普遍采用的遵守多启动规范的Bootloader是LILO，被grub取代：

        1.动态可配置，启动时读取配置信息，且允许启动时修改
        
        2.支持的操作系统广泛，能够支持多种可执行格式。不但能够启动支持多启动规范的操作系统，还能够

        通过链式启动功能支持诸如windows和OS/2之类的不支持多启动规范的操作系统。不但支持linux的文件系统

        ,还支持windows的fat、ntfs，更支持LBA模式，甚至允许用户查看它所支持的文件系统里的内容。

        3.grub拥有丰富的控制台命令与用户交互？？？？？？？
        
        4.可以从镜像文件中启动操作系统，甚至可以通过网络下载操作系统镜像

        第一代的grub：

        第一阶段占MBR的坑 stage1文件，大小512；第二阶段只能放在紧接在MBR的固定位置，大概30k,这一阶段编译出的

        是stage1_5,stage2存放在何种文件系统上，此处对应的就是何种文件系统的stage1.5

        stage1要被安装在某个硬盘的注意到记录（MBR446字节），stage1的主要也是唯一的作用就是找到存放在硬盘某个

        地方的stage2文件

        stage2文件可以存在于某个特定的文件系统中，stage1_5负责解释文件系统，stage2文件放在了那种文件系统上，就调用

        那种文件的stage1_5文件

        grub2改变了引导启动流程，架构上也发生了很大的变化

        第一阶段 boot.img，占mbr的坑，512字节。
        
        但是不去找stage1_5,而是去1M空间中找diskboot.img,是第二阶段的代码，
        512字节是grub核心文件core.img的第一个扇区，继续将core.img的剩余部分读到内存.

        第三阶段开始加载grub内核模块（这样设计的好处是core.img可以做的小，可配置性和扩展性高）

        第四阶段才是启动操作界面

        内核启动参数：？？？？

        
        Bootloader将一切准备工作做好之后，有两个选择；第一是回到实模式，让内核自己重新来过，第二是Bootloader在
        保护模式下直接交权内核，内核继续接下来的工作.grub选择了第二种

        内核引导协议：bootloader需要将内核需要的数据按照特定格式准备好，还为此特定制定规范

        CPU的实模式和保护模式？？？？？？

        1.内核解压完毕后，跳转到startup_32执行，汇编语言写成,0号进程,决定linux的内存布局........

        2.然后跳往start_kernel,与具体的硬件关系不大，为linux准备内核需要的数据结构.随后，会创建一个kernel_init的线程，

        然后进入自己的最终归宿，cpu_idle，进入无休止的循环当中，该进程pid为0，他会一直调用cpu的idle指令，让cpu降温且省电

        优先级低

        3.kernel_init:linux系统最为重要的init进程的内核部分,这是linux进程中第二个进程，pid为1。给硬件加载驱动程序、初始化网络栈

        等

        4.init进程：

        initrd：在内存中开辟一块模拟的磁盘空间,先将此模拟的磁盘空间作为根文件系统，并执行initrd中的/linuxrc脚本,负责加载内核要访问的

        真正的根文件系统所必须的驱动和挂接真正的根文件系统

        initramfs：initrd是一种ramdisk，linux要访问initrd则必须带有对应的文件系统驱动。

        而initramfs是一个使用gzip压缩的cpio文件，linux会将它的内容装载进一个tmpfs，这就不需要任何文件系统驱动

        tmpfs、initramfs？？？？？？？？？？？？？？？？？？？？？？？


        init  “init=”内核启动参数，只要一个程序或一组程序能完成对应的功能就行，centos使用的是systemd

        虚拟终端：

        /dev/tty代表正在使用的终端,tty0代表目前被激活的所有虚拟终端

        getty？？？？？？

        伪终端：有sshd等自己申请资源并管理登陆

        能够熟练的掌握某个常用发行版的配置文件，才能真正驯服这个系统





        OSI强调提供可靠的数据服务，每一层都要进行检测和错误处理。

        TCP/IP认为可靠要由端到端来保障

        网路工具：

        ifconfig、route、netstat、nslookup、tcpdump等工具的使用？？？？


        Socket API：

        掌握tcp/ip协议栈需要理解系统调用、socketfs文件系统和sk_buff

        应用程序调用glibc中的函数-->glibc中的函数引用系统调用宏-->系统调用宏中使用int 0x80完成系统调用

        socketfs：创建一个套接字就是在socketfs文件系统中创建一个特殊文件

        sock_init将socket注册为一个伪文件系统,并安装在相应的mount点;然后依据protocol_family创建socket

        sk_buff:???????????

        邮件系统的组成:邮局、邮递员和邮政法

        Cache is king 关系型数据库和非关系型数据库的搭配使用

        mongo和redis的区别？？？？？

        netfilter/iptables:前者是内核模块实现，后者是上层操作的工具

        netfilter:内核的一部分，由一些信息包过滤组成，这些表包含内核用来控制信息包过滤处理的规则集。

        是linux内核的一个通用架构，提供一系列的表，每个表由若干链组成,每条链中可以由一条或数条规则。

        支持L2 L3  L4层的包过滤、数据包修改、NAT、转发策略和拦截策略等。

        iptables：通过socket对netfilter进行操作

        预先配好5条传送带

        PREROUTING  INPUT   FORWARD  OUTPUT  POSTROUTING

        四个包裹过滤处理规范表

        raw>mangle>nat>filter

        iptables [-t table] command [match] [target/jump]

        ????????????????????????

        rcp scp rsync ftp sftp lftp wget curl????

        nfs、smaba

        VPN：二十世纪末，普遍的做法是使用专线

        网络设备：

        中继器  第一层

        网桥     第二层   转换不同网络类型的数据帧

        路由器/第三层交换机   第三层  处理的是包

        网关      

        ioctl：是设备驱动程序对设备的i/o通道进行管理的一个系统调用。

        用户程序的任务是通过ioctl告诉驱动程序它想做什么，完成这些命令就是驱动程序的功能

        网络设备驱动层就是连接网络堆栈协议层和网络硬件的中间层

        网络设备驱动层可以分为：网络协议接口层  网络设备接口层   设备驱动层

        网络协议接口层--向网络层协议提供统一的数据收发服务

        网络设备接口层--提供一个统一的用于描述设备属性和操作的结构体net_device,里面装满了设备驱动层需要实现的各种函数名

        设备驱动层---实现设备接口层的函数。通过hard_start_xmit函数启动发送操作，接收操作则是利用网络设备的终端来触发

        
        其中后续的内容介绍的过于底层，有一定积累之后在看！！！！！！！
    </pre>
    <img src="./images/37.PNG" />
    <img src="./images/38.PNG" />
    <img src="./images/39.PNG" />
    <img src="./images/40.PNG" />
    <img src="./images/41.PNG" />
    <p>
        <b style="color: red;">《Linux就是这个范儿》</b>
    </p>
    <hr>
	<b>linux下一阶段进阶：shell脚本的联系、网络管理的工具的应用--->系统编程层面、docker、企业级的运维</b>

</body>

</html>